package com.alphathink.deliveryassist;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.AlphaThink.DeliveryAssist.R;
import com.alphathink.deliveryassist.http.NetOperater;
import com.alphathink.deliveryassist.util.SharePrefUtil;

/***
 * 登陆界面
 * 
 * @author click
 * 
 */
public class LoginActivity extends Activity {

	public static String TAG = "LoginActivity";
	public EditText mUserNameET, mPwdET;
	public Button mLogin;
	public SharedPreferences preferences = null;
	private String mUserName, mPwd;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_login);

		initView();
	}

	/**
	 * 
	 */
	private void initView() {
		preferences = SharePrefUtil.getPref(getApplicationContext());

		String state = preferences.getString(SharePrefUtil.STATE,
				SharePrefUtil.STATE);
		mUserNameET = (EditText) findViewById(R.id.Login_Activity_EditName);
		if ("STATE".equals(state)) {

			mUserNameET.setText("");
		} else {
			String mOldName = preferences.getString(SharePrefUtil.USERNAME,
					SharePrefUtil.USERNAME);

			mUserNameET.setText(mOldName);
		}

		mPwdET = (EditText) findViewById(R.id.Login_Activity_EditPsw);
		mLogin = (Button) findViewById(R.id.login_activity_login);
		mLogin.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				mUserName = mUserNameET.getText().toString();
				mPwd = mPwdET.getText().toString();
				if (!"".equals(mUserName) && !"".equals(mPwd)) {
					LoginAsynTask asynTask = new LoginAsynTask();
					asynTask.execute(mUserName, mPwd);

				} else {
					Toast.makeText(getApplicationContext(), "用户名密码出错！",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
	}

	/**
	 * 生成该类的对象，并调用execute方法之后 首先执行的是onProExecute方法 其次执行doInBackgroup方法
	 * 
	 */
	public class LoginAsynTask extends AsyncTask<String, Integer, Object> {
		private String mTempUserName = "";
		private String mTempPwd = "";
		private View view = getLayoutInflater().inflate(R.layout.loding_dialog,
				null);
		private AlertDialog.Builder alertDialog = new AlertDialog.Builder(
				LoginActivity.this).setView(view);

		AlertDialog alertDialogs = alertDialog.create();

		public LoginAsynTask() {

			alertDialogs.getWindow().setType(
					WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
			alertDialogs.setCancelable(false);
			alertDialogs = alertDialog.show();
		}

		/**
		 * 这里的Integer参数对应AsyncTask中的第一个参数 这里的String返回值对应AsyncTask的第三个参数
		 * 该方法并不运行在UI线程当中，主要用于异步操作，所有在该方法中不能对UI当中的空间进行设置和修改
		 * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作
		 */
		@Override
		protected Object doInBackground(String... params) {
			// parmas->0:username;1:password
			mTempUserName = params[0];
			mTempPwd = params[1];
			String host = preferences.getString(SharePrefUtil.LOGIN_URL,
					SharePrefUtil.LOGIN_URL);
			NetOperater netOperator = new NetOperater();
			// 获取到后台返回的数据存储在一个string中，
			String str = netOperator.operaterNetLogin(mTempUserName, mTempPwd,
					host);

			Log.d(TAG, "====Login时doInBackground中返回的string类型的参数====" + str);
			return str;
		}

		/**
		 * 这里的String参数对应AsyncTask中的第三个参数（也就是接收doInBackground的返回值）
		 * 在doInBackground方法执行结束之后在运行，并且运行在UI线程当中 可以对UI空间进行设置
		 */
		@Override
		protected void onPostExecute(Object result) {

			System.out.println("====student====" + result);

			// 如果this.isCancelled等于true这取消操作
			if (this.isCancelled()) {
				return;
			}
			if (result == null) {
				alertDialogs.cancel();

				Log.v(TAG, "onPostExecute-->基本上是解析出错．或者网络错误");
				return;
			}

			// 将String result强制转换成LoginNetModel

			/**
			 * 200 请求成功 400 未知错误 401 用户名不存在 402 密码错误 500 服务器内部错误 404 参数不完整
			 * 
			 */
			if ("true".equals(result)) {
				alertDialogs.cancel();
				SharedPreferences.Editor editor = preferences.edit();
				editor.putString(SharePrefUtil.USERNAME, mTempUserName);
				editor.putString(SharePrefUtil.LOGIN_PWD, mTempPwd);
				editor.putString(SharePrefUtil.STATE, "true");
				editor.commit();
				Log.d(TAG,
						"保存到缓存中的username"
								+ preferences.getString(SharePrefUtil.USERNAME,
										""));
				Log.d(TAG,
						"pwd"
								+ preferences.getString(
										SharePrefUtil.LOGIN_PWD, ""));
				Intent intent = new Intent();
				intent.setClass(LoginActivity.this, ModelSelectActivity.class);
				startActivity(intent);
				Log.d(TAG, "登陆成功，写入后台数据库");
				LoginActivity.this.finish();

			} else {
				alertDialogs.cancel();
				// 这里是其他情况．自己进行判断处理
				Toast.makeText(getApplicationContext(), "用户名密码出错！",
						Toast.LENGTH_SHORT).show();
			}
		}

		// 该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置
		@Override
		protected void onPreExecute() {
			super.onPreExecute();
		}

		/**
		 * 这里的Intege参数对应AsyncTask中的第二个参数
		 * 在doInBackground方法当中，，每次调用publishProgress方法都会触发onProgressUpdate执行
		 * onProgressUpdate是在UI线程中执行，所有可以对UI空间进行操作
		 */
		// 运行中变动代码
		@Override
		protected void onProgressUpdate(Integer... values) {

		}

	}
}
